
package osifbot;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jibble.pircbot.PircBot;

/**
 *
 *
 * 
 *    OSIFBOT
 *    Copyright (C) 2013  etchner jorge@devetch.com
 *
 *    This program is free software: you can  redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
public class IRC extends PircBot {

    private InterfazBBDD interfaz;
    private String url;

    private static boolean isNumeric(String str) {
        for (char c : str.toCharArray()) {
            if (!Character.isDigit(c)) {
                return false;
            }
        }
        return true;
    }

    public IRC(String nick, InterfazBBDD interfaz, String url) {
        this.setName(nick);
        this.interfaz = interfaz;
        this.url = url;
    }

    public IRC(String nick, String login, InterfazBBDD interfaz, String url) {
        this.setName(nick);
        this.setLogin(login);
        this.interfaz = interfaz;
        this.url = url;
    }
    
    private void addPeticion(String usuario, String ip) throws SQLException{           
            interfaz.addPeticion(usuario, ip);
    }
    
    @Override
    protected void onMessage(String channel, String sender, String login, String hostname, String message) {
        super.onMessage(channel, sender, login, hostname, message);
        boolean peticion = false;
        boolean registro = false;
        String orden_pedido = "!pedido";
        String orden_help = "!ayuda";
        String orden_url = "!url";
        long id = -1;
        
        if (message.startsWith(orden_pedido)) {
            
            
            
            
            String[] mensaje = message.trim().split(orden_pedido);
             
            if (mensaje.length == 2) { //Reparto y registro de petición
                
                String argumento = mensaje[1].trim();
                
                String[] regexp = argumento.split("http://www.erepublik.com/[a-z]{2}/citizen/profile/");
                if(regexp.length == 2){
                    sendMessage(channel, sender + " tu id es " + regexp[1] + " no lo olvides.");
                    id = Long.parseLong(regexp[1]);
                    peticion = true;
                    registro = true;
                }                
                else if (!isNumeric(argumento)) {
                    sendMessage(channel, "La id tiene un formato incorrecto");


                } else {
                    id = Long.parseLong(mensaje[1].trim());                    
                    registro = true;
                }
            }
            else if(mensaje.length == 0){
                peticion = true;            
            }
            else{
                sendMessage(channel, sender + "La petición tiene un formato incorrecto");
            }
            
            if(registro){
                    try {
                        if (!interfaz.isConnected()) {
                            interfaz.connect();
                        }
                        interfaz.addUser(sender, id);
                        sendMessage(channel, sender + " ya estás registrado. A partir de ahora, usa "+orden_pedido);
                        peticion = true;
                        
                        
                        
                    } catch (SQLException ex) {
                        int codigo = ex.getErrorCode();
                        System.out.println(codigo);
                        if (codigo == 1062) {
                            sendMessage(channel, sender + " ya estás registrado, a partir de ahora, usa "+orden_pedido);
                            peticion = true;
                        }
                         else{
                            sendMessage(channel, "Hostias, he petado!, etch etch papi, mira ésto, error " + codigo);
                        }
                    }            
            
            }
            
            if(peticion){
                try {
                    if (!interfaz.isConnected()) {
                          interfaz.connect();
                    }
                    if(hostname.length() > 254) {
                        addPeticion(sender,hostname.substring(0, 255));
                    }
                    else {
                        addPeticion(sender,hostname);
                    }
                     sendMessage(channel, sender + " La petición ha sido registrada correctamente");                    
                     sendMessage(channel, sender + " Podrás verla aquí: "+url);
                } catch (SQLException ex) {
                    int codigo = ex.getErrorCode();
                    
                    if(codigo == 1062){
                        sendMessage(channel, sender + " Tu ya has pedido, vuelve mañana"); 
                    }
                    else if(codigo == 1452){
                        sendMessage(channel, sender + " No te has registrado, escribe "+orden_pedido+ " id_ciudadano o un enlace a tu perfil"); 
                    }
                    else{
                        sendMessage(channel, "Hostias, he petado!, etch etch papi, mira ésto, error " + codigo);
                    }
                }
            }
            
            
        }
        else if(message.startsWith(orden_help)){
            sendMessage(channel, "Si nunca has pedido, escribe !pedido <id_ciudadano>");
            sendMessage(channel, "Si no sabes la id, escribe  !pedido <link a tu perfil>");
            sendMessage(channel, "Y a partir de ahora, escribe !pedido");
            sendMessage(channel, "Sé paciente, ya te repartirán.");
             sendMessage(channel, "Puedes ver la lista de pedidos escribiendo !url");
        }
        else if(message.startsWith(orden_url)){
            sendMessage(channel, url);
        }        
    }
}
